/***************************************************************************
 创建者：华磊
 开始时间：         : 2020.11.10
 copyright            : (C) 深圳市华友高科有限公司
 修改说明：（每次有修改就添加一条，带有 修改人，修改时间，修改描述）

 ***************************************************************************
 *   程序文件主视窗
*                                                                         *
 ***************************************************************************/
#ifndef PROGRAMFILEVIEW_H
#define PROGRAMFILEVIEW_H

#include "programfileview_global.h"

#include <QDialog>
#include <QFileInfo>
#include <QDateTime>
#include <QDirModel>
#include <QFileSystemModel>
#include <QModelIndex>
#include <QStandardItemModel>
#include <QTranslator>

#include "newfileview.h"
#include "settingproperty.h"
#include "copysettingdialog.h"
#include "deletedialog.h"
#include <QTableWidgetItem>

#include "../CommunicateDelegate/globaldata.h"



namespace Ui {
class ProgramFileView;
}

/**
 * @brief The ProgramFileView class　程序文件视窗类
 */
class  ProgramFileView : public QDialog
{
    Q_OBJECT
public:
    /**
     * @brief The FileProperty struct文件属性结构体
     */
    struct FileProperty
    {
        QString fileName;   //文件名
        QString version;    //文件版本号
        QString owner;    //文件所有者
        QString createTime;    //文件创建时间
        QString modifyTime;    //文件最后一次的修改时间
        QString note;   //文件注释
        QString type;   //文件类型

    };

public:
    explicit ProgramFileView(int styleId,GlobalData *globalDataIn,QWidget *parent = 0);
    ~ProgramFileView();

public:
    void showThisDialog();
    void mountFileUpdate();

    /**
     * @brief updateView　更新设置数据到界面控件上
     */
    void updateView();

    void changeLanguage(int language);
    void initialDisplayStyle(int styleId);


signals:
    /**
     * @brief msgBoxSignal                      通知 打开消息框
     */
    void msgBoxSignal(int type,QString title,QString text);

    /**
     * @brief newFile新建文件信号函数
     * @param fileName文件名
     * @param fileString文件列表
     */
    //void newFile();

    /**
     * @brief openFile打开文件信号函数
     * @param fleName要打开的文件名
     */
    void openFile(QString fleName);

    /**
     * @brief deleteFile删除文件信号函数
     * @param fileName要删除的文件名
     */
    //void deleteFile(QString fileName);//转移到子页面

    /**
     * @brief copyFile复制文件信号函数
     * @param fileName要复制的文件名
     */
    //void copyFile(QString fileName);//转移到子页面

    /**
     * @brief defaultSetting缺省设定信号函数
     * @param fileName文件名
     */
    void defaultSetting(QString fileName);

    /**
     * @brief settingFileProperty文件属性设置信号函数
     */
    void settingFileProperty(ProgramFileView::FileProperty );


    /**
     * @brief selectedFileChanged点击选择文件操作信号函数
     * @param fileName文件名
     * @param index文件路径
     */
    void selectedFileChanged(QString fileName, const QModelIndex &index);

    /**
     * @brief updateProgramFileList         刷新程序文件列表
     */
    void updateProgramFileList_Signal();

private slots:
    /**
     * @brief on_newFileBtn_clicked新建文件槽函数
     */
    void on_newFileBtn_clicked();

    /**
     * @brief on_openFileBtn_clicked打开文件槽函数
     */
    void on_openFileBtn_clicked();

    /**
     * @brief on_delFileBtn_clicked删除文件槽函数
     */
    void on_delFileBtn_clicked();

    /**
     * @brief on_copyFileBtn_clicked复制文件槽函数
     */
    void on_copyFileBtn_clicked();

    /**
     * @brief on_defaultFileSetBtn_clicked缺省设定槽函数
     */
    void on_defaultFileSetBtn_clicked();

    /**
     * @brief on_setFileProBtn_clicked文件属性设置槽函数
     */
    void on_setFileProBtn_clicked();

    /**
     * @brief on_file_treeView_clicked双击文件槽函数(现改为单击)
     * @param index
     */
    //void on_file_treeView_doubleClicked(const QModelIndex &index);
    void on_file_treeView_clicked(const QModelIndex &index);


    void on_pushButton_clicked();


    void on_RemoteFile_TableWidget_itemClicked(QTableWidgetItem *item);


public:

    /**
     * @brief fileString文件列表
     */
    QStringList fileString;

    /**
     * @brief remoteProgramFileList    远程程序文件列表
     */
    QStringList remoteProgramFileList;

    /**
     * @brief dirModel文件目录显示列表
     */
    //QDirModel * dirModel;
    QFileSystemModel *dirModel;

    /**
     * @brief index当前文件根目录
     */
    QModelIndex index;

    QAbstractItemModel *model;


    FileProperty fileProperty;

    /**
     * @brief currentSelectFileName         当前选中文件名
     */
    QString currentSelectFileName;

 public:
    /**
     * @brief newfileView NewFileView类指针对象
     */
    NewFileView *newfileView;
    /**
     * @brief settingProperty SettingProperty类指针对象
     */
    SettingProperty *settingProperty;

    CopySettingDialog *copySettingDialog;

    DeleteDialog *deleteDialog;

private:
    QTranslator translator;
    GlobalData *globalData;

private:
    Ui::ProgramFileView *ui;
    int styleId;
};

#endif // PROGRAMFILEVIEW_H
